package com.song.EMS.service.impl;

import com.song.EMS.bean.Courier;
import com.song.EMS.dao.impl.CourierDaoImpl;
import com.song.EMS.exception.CourierIDCardException;
import com.song.EMS.exception.CourierPhoneException;
import com.song.EMS.service.CourierService;
import com.song.EMS.utils.DateFormatUtil;

import java.sql.SQLException;
import java.util.List;

public class CourierServiceImpl implements CourierService {
    private CourierDaoImpl courierDao = new CourierDaoImpl();

    /**
     * 查询快递员的所有信息
     *
     * @param limit     true 分页
     * @param pageIndex 分页起始索引
     * @param pageSize  分页数目
     * @return 快递员信息集合
     */
    @Override
    public List<Courier> selectCouriers(Boolean limit, Integer pageIndex, Integer pageSize) {
        List<Courier> couriers = courierDao.selectCouriers(limit, pageIndex, pageSize);
        for (Courier courier : couriers) {
            courier.setRegisterTime1(DateFormatUtil.getDate(courier.getRegisterTime()));
            courier.setLoginTime1(DateFormatUtil.getDate(courier.getLoginTime()));
        }
        return couriers;
    }

    /**
     * 通过手机号查询快递员
     *
     * @param courierPhone 快递员手机号
     * @return 快递员信息
     */
    @Override
    public Courier selectByPhone(String courierPhone) {
        return courierDao.selectByPhone(courierPhone);
    }

    /**
     * 录入快递员
     * @param courier 被录入的快递员对象
     * @return 1 录入成功  0 失败  -1 号码重复  -2 身份证号码重复
     */
    @Override
    public Integer insertCourier(Courier courier) {
        try {
            courierDao.insertCourier(courier);
            return 1;
        } catch (CourierPhoneException e) {
            if (e.getMessage().endsWith("key 'courier.courierPhone'")){
                return -1;
            }else {
                e.printStackTrace();
            }
        } catch (CourierIDCardException e) {
            if (e.getMessage().endsWith("for key 'courier.IDCard'")){
                return -2;
            }else {
                e.printStackTrace();
            }
        }
        return 0;
    }

    /**
     * 修改快递员信息
     *
     * @param courier 被修改的快递员对象
     * @return 1 修改成功 0 失败 -1 号码重复  -2 身份证号码重复
     */
    @Override
    public Integer updateCourier(Courier courier) {
        try {
            courierDao.updateCourier(courier);
            return 1;
        } catch (CourierPhoneException e) {
            if (e.getMessage().endsWith("key 'courier.courierPhone'")){
                return -1;
            }else {
                e.printStackTrace();
            }
        } catch (CourierIDCardException e) {
            if (e.getMessage().endsWith("for key 'courier.IDCard'")){
                return -2;
            }else {
                e.printStackTrace();
            }
        }
        return 0;
    }

    /**
     * 删除快递员
     *
     * @param courierId 被删除快递员的编号
     * @return true 成功  false 失败
     */
    @Override
    public Boolean deleteCourier(Integer courierId) {
        return courierDao.deleteCourier(courierId);
    }

    /**
     * 快递员的总人数与每日注册人数
     *
     * @return 总人数与注册人数的集合
     */
    @Override
    public List courierConsole() {
        return courierDao.courierConsole();
    }

    /**
     * 通过手机号修改其登录记录
     *
     * @param courierPhone 用户手机号
     */
    @Override
    public void updateLoginTime(String courierPhone) {
        courierDao.updateLoginTime(courierPhone);
    }

    /**
     * 快递员最勤快
     *
     * @param date null表示全部时间内  %y 表示一年之内   %m  表示一个月之内
     * @return 快递员根据处理快件数排行
     */
    @Override
    public List<Courier> getHardworkingCouriers(String date) {
        return courierDao.getHardworkingCouriers(date);
    }

    /**
     * 快递员最勤懒
     *
     * @param date null表示全部时间内  %y 表示一年之内   %m  表示一个月之内
     * @return 快递员根据处理快件数排行
     */
    @Override
    public List<Courier> getLazyCouriers(String date) {
        return courierDao.getLazyCouriers(date);
    }
}
